using System.IO;
using System.Windows;
using Cupertino.Support.Helps;
using Cupertino.Support.Models;

namespace Cupertino.Forms.ViewModels;

public class CupertinoWindowViewModel
{
    public List<FileItem> Files { get; set; }
    public CupertinoWindowViewModel()
    {
        FileCreator fileCreator = new();
        //创建真实的目录和文件，方便测试我们的自定义控件
        fileCreator.Create();
        //第一层目录是0，随着递归调用第二层目录是1，第三层是2
        int depth = 0;
        string root = fileCreator.BasePath + "/salmon";
        List<FileItem> source = new();
        GetFiles(root, source,depth);
        Files = source;
    }
    private void GetFiles(string root, List<FileItem> source,int depth)
    {   
        // 获取第一层子目录
        // 返回一个字符串数组，每个元素是一个子目录的完整路径。
        string[] dirs = Directory.GetDirectories(root);
        // 只获取指定目录本身包含的文件，不会深入到子目录中去查找
        string[] files = Directory.GetFiles(root);
        //保存所有子目录路径和名称
        foreach (string dir in dirs)
        {
            FileItem item = new();
            item.Name = Path.GetFileNameWithoutExtension(dir);
            item.Path = dir;
            item.Size = null;
            item.Depth = depth;
            item.Type ="Folder";
            item.Children = new List<FileItem>();
            source.Add(item);
            //递归保存，层层深入子目录
            GetFiles(dir, item.Children,depth + 1);
        }
        //保存所有文件路径和名称(子目录下面有一个或多个文件)
        foreach (string file in files)
        {
            FileItem item = new();
            item.Name = Path.GetFileNameWithoutExtension(file);
            item.Path = file;
            item.Size = new FileInfo(file).Length;
            item.Depth = depth;
            item.Extension = new FileInfo(file).Extension;
            item.Type ="File";
            source.Add(item);
        }
    }
}